package com.example.test1.assistant;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;

import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;

@AiService(
        wiringMode = EXPLICIT,
        chatModel = "qwenChatModel",
        chatMemoryProvider = "chatMemoryProvider"
)
//绑定大模型和记忆区提供者,使用自定义的记忆区提供者,实现隔离的聊天记忆


public interface SeparateChatAssistant {
    /**
     * 分离聊天记录区,记录一个主键,用于区分不同的聊天记录区
     * 调用方法时传入参数,
     * @MemoryId int memoryId，作用是     从请求参数中获取名为 MemoryId 的参数值，
     * 并将其转换为 int 类型，然后将其作为方法的参数传递给 chat 方法。
     * 这样，在调用 chat 方法时，就可以直接使用 memoryId 变量来表示聊天记录区的唯一标识符。
     * @param memoryId 聊天id
     * @param userMessage 用户消息
     * @return
     */
    //新增！！
    //如果要显示今天的日期，我们需要在提示词中添加当前日期的占位符{{current_date}}
//    @SystemMessage("你是我的好朋友，请用东北话回答问题。今天是{{current_date}}")//系统消息提示词
    //新增2！！
    //直接导入文件作为提示词：
    @SystemMessage(fromResource = "tishici.txt")//系统消息提示词
    String chat(@MemoryId int memoryId, @UserMessage String userMessage);
    //底层解释：
    //chat方法会根据传入的memoryId参数，从注解中绑定的  chatMemoryProvider  那里创建一个 对应的ChatMemory记忆对象，
    //然后向大模型发送请求，将相应信息存入记忆区，并返回给用户。
}
